
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()
const usersCollection = db.collection('users')

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const { type, userInfo } = event

  switch (type) {
    case 'login':
      // 处理用户登录
      return await handleLogin(wxContext, userInfo)
    case 'checkAuth':
      // 检查用户是否已登录
      return await checkUserAuth(wxContext)
    default:
      return {
        code: -1,
        msg: '未知的操作类型'
      }
  }
}

// 处理用户登录
async function handleLogin(wxContext, userInfo) {
  try {
    // 查找用户是否已存在
    const user = await usersCollection.where({
      openid: wxContext.OPENID
    }).get()

    if (user.data.length === 0) {
      // 新用户，创建用户记录
      const userData = {
        openid: wxContext.OPENID,
        unionid: wxContext.UNIONID || '',
        createTime: db.serverDate(),
        updateTime: db.serverDate(),
        ...userInfo
      }
      
      await usersCollection.add({
        data: userData
      })

      return {
        code: 0,
        msg: '用户创建成功',
        data: userData
      }
    } else {
      // 更新已有用户信息
      const userData = {
        updateTime: db.serverDate(),
        ...userInfo
      }

      await usersCollection.where({
        openid: wxContext.OPENID
      }).update({
        data: userData
      })

      return {
        code: 0,
        msg: '用户信息更新成功',
        data: {
          ...user.data[0],
          ...userData
        }
      }
    }
  } catch (err) {
    console.error('[用户登录]失败：', err)
    return {
      code: -1,
      msg: '用户登录失败',
      error: err
    }
  }
}

// 检查用户认证状态
async function checkUserAuth(wxContext) {
  try {
    const user = await usersCollection.where({
      openid: wxContext.OPENID
    }).get()

    if (user.data.length === 0) {
      return {
        code: 1,
        msg: '用户未登录',
        data: null
      }
    }

    return {
      code: 0,
      msg: '用户已登录',
      data: user.data[0]
    }
  } catch (err) {
    console.error('[检查用户认证]失败：', err)
    return {
      code: -1,
      msg: '检查用户认证失败',
      error: err
    }
  }
}